package me.boot.db.mybatis.template;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import me.boot.db.mybatis.injector.methods.InsertBatch;
import me.boot.db.mybatis.injector.methods.InsertIgnore;
import me.boot.db.mybatis.template.entity.Entity;

import java.io.Serializable;
import java.util.List;

/**
 * @Description:
 * @author: Sylar
 * @date: 2021年10月08日 11:31 上午
 */
public interface SuperService<ID extends Serializable, T extends Entity<ID>> extends IService<T> {

    /**
     * 插入数据,并返回ID
     *
     * @param entity 数据
     * @return ID
     */
    default ID insert(T entity) {
        boolean result = SqlHelper.retBool(getBaseMapper().insert(entity));
        return result ? entity.getId() : null;
    }


    /**
     * 插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertIgnore}
     *
     * @param entity 实体类
     * @return ID
     */
    ID insertIgnore(T entity);

    /**
     * 批量插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertIgnore}
     *
     * @param entityList 实体类列表
     * @return 影响条数
     */
    int insertIgnoreBatch(List<T> entityList);

    /**
     * 批量插入数据，如果中已经存在相同的记录，则忽略当前新数据
     * {@link InsertBatch}
     *
     * @param entityList 实体类列表
     * @return 影响条数
     */
    int insertBatch(List<T> entityList);

    /**
     * 修改所有的字段，未设置的字段将置空
     *
     * @param entity
     * @return
     */
    boolean updateAllById(T entity);

}
